/*****************************************************************
 jQuery Ajax封装通用类  (zhoudl)
 *****************************************************************/
$(function () {
    /**
     * ajax 封装
     * url 发送请求的地址
     * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
     * async 默认值: true。默认设置下，所有请求均为异步请求。如果需要发送同步请求，请将此选项设置为 false。
     *       注意，同步请求将锁住浏览器，用户其它操作必须等待请求完成才可以执行。
     * type 请求方式("POST" 或 "GET")， 默认为 "GET"
     * dataType 预期服务器返回的数据类型，常用的如：xml、html、json、text
     * successfn 成功回调函数
     * errorfn 失败回调函数
     */
    jQuery.ax = function (url, data, async, type, dataType, successfn, errorfn) {
        async = (async == null || async == "" || typeof(async) == "undefined") ? "true" : async;
        type = (type == null || type == "" || typeof(type) == "undefined") ? "post" : type;
        dataType = (dataType == null || dataType == "" || typeof(dataType) == "undefined") ? "json" : dataType;
        data = (data == null || data == "" || typeof(data) == "undefined") ? {"date": new Date().getTime()} : data;
        $.ajax({
            type: type,
            async: async,
            data: data,
            url: url,
            dataType: dataType,
            beforeSend:function(){
                $.addloadding();
            },
            complete: function () {
                $.delloadding();
            },
            success: function (d) {
                successfn(d);
            },
            error: function (e) {
                errorfn(e);
            }
        });
    };

    /**
     * ajax封装
     * url 发送请求的地址
     * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
     * successfn 成功回调函数
     */
    jQuery.axs = function (url, data, successfn) {
        data = (data == null || data == "" || typeof(data) == "undefined") ? {"date": new Date().getTime()} : data;
        $.ajax({
            type: "post",
            data: data,
            url: url,
            dataType: "json",
            beforeSend:function(){
                $.addloadding();
            },
            complete: function () {
                $.delloadding();
            },
            success: function (d) {
                successfn(d);
            }
        });
    };

    /**
     * ajax封装
     * url 发送请求的地址
     * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
     * dataType 预期服务器返回的数据类型，常用的如：xml、html、json、text
     * successfn 成功回调函数
     * errorfn 失败回调函数
     */
    jQuery.axse = function (url, data, successfn, errorfn) {
        data = (data == null || data == "" || typeof(data) == "undefined") ? {"date": new Date().getTime()} : data;
        $.ajax({
            type: "post",
            data: data,
            url: url,
            dataType: "json",
            beforeSend:function(){
                $.addloadding();
            },
            complete: function () {
                $.delloadding();
            },
            success: function (d) {
                successfn(d);
            },
            error: function (e) {
                errorfn(e);
            }
        });
    };

    /**
     * formData 方式提交数据
     * @param url
     * @param data
     * @param successfn
     * @param errorfn
     */
    jQuery.axseFormData = function (url,data,successfn,errorfn,buttonId) {
        data = (data == null || data == "" || typeof(data) == "undefined") ? {"date": new Date().getTime()} : data;
        $.ajax({
            type: "post",
            data: data,
            url: url,
            contentType: false,
            processData: false,
            beforeSend:function(){
                $("#" + buttonId).attr({ disabled: "disabled" });
                $.addloadding();
            },
            complete: function () {
                $.delloadding();
                $("#" + buttonId).removeAttr("disabled");
            },
            success: function (d) {
                successfn(d);
            },
            error: function (e) {
                errorfn(e);
            }
        });
    }

    /**
     * 提交json格式对象数据
     * @param url
     * @param data
     * @param successfn
     * @param errorfn
     */
    jQuery.axseJson = function (url, data, successfn, errorfn) {
        data = (data == null || data == "" || typeof(data) == "undefined") ? {"date": new Date().getTime()} : data;
        $.ajax({
            type: "post",
            data: data,
            url: url,
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            beforeSend:function(){
                $.addloadding();
            },
            complete: function () {
                $.delloadding();
            },
            success: function (d) {
                successfn(d);
            },
            error: function (e) {
                errorfn(e);
            }
        });
    };
    /**
     * 带禁用按钮功能 传入按钮ID值即可
     * @param url
     * @param data
     * @param successfn
     * @param errorfn
     */
    jQuery.axseDisable = function (url, data, successfn, errorfn,buttonId) {
        data = (data == null || data == "" || typeof(data) == "undefined") ? {"date": new Date().getTime()} : data;
        $.ajax({
            type: "post",
            data: data,
            url: url,
            dataType: "json",
            beforeSend:function(){
                $("#" + buttonId).attr({ disabled: "disabled" });
                $.addloadding();
            },
            complete: function () {
                $.delloadding();
                $("#" + buttonId).removeAttr("disabled");
            },
            success: function (d) {
                successfn(d);
            },
            error: function (e) {
                errorfn(e);
            }
        });
    };

    /**
     * 同步请求 async: false
     */
    jQuery.axsefalse = function (url, data, successfn, errorfn) {
        data = (data == null || data == "" || typeof(data) == "undefined") ? {"date": new Date().getTime()} : data;
        $.ajax({
            type: "post",
            data: data,
            url: url,
            dataType: "json",
            async: false,
            beforeSend:function(){
                $.addloadding();
            },
            complete: function () {
                $.delloadding();
            },
            success: function (d) {
                successfn(d);
            },
            error: function (e) {
                errorfn(e);
            }
        });
    };

    var loadingIndex;
    /*
    加载中图标
     */
    jQuery.addloadding = function addloadding() {
        loadingIndex = top.layer.msg('处理中，请稍后...', {
            icon: 16,
            shade: 0.15,
            time: 0
        })
    }

    /*
    加载完成后去掉加载中图标
     */
    jQuery.delloadding = function delloadding() {
        top.layer.close(loadingIndex);//关闭提示窗口
    }
});

/**
 * 调用举例
 */
/*
$.ax(
    getRootPath()+"/test/ajax.html",
    null,
    null,
    null,
    null,
    function(data){
        alert(data.code);
    },
    function(){
        alert("出错了");
    }
);

$.axs(getRootPath()+"/test/ajax.html", null, function(data){
    alert(data.data);
});

$.axse(getRootPath()+"/test/ajax.html",
    null,
    function(){
        alert("成功了");
    },
    function(){
        alert("出错了");
});
 */